extends Area2D

var direction = Vector2.RIGHT
var speed = 400.0
var damage = 15
var area_radius = 50.0
var burn_damage = 3
var burn_duration = 3.0
var is_critical = false
var lifetime = 5.0  # 最大存活时间（秒）

var time_alive = 0.0

func _ready():
	# 设置碰撞检测
	connect("body_entered", _on_body_entered)
	
	# 设置火球外观（根据是否暴击）
	if is_critical:
		$Sprite2D.modulate = Color(1.5, 0.8, 0.8)  # 暴击时颜色更亮
		$Sprite2D.scale = Vector2(1.5, 1.5)  # 暴击时尺寸更大

func _process(delta):
	# 移动火球
	position += direction * speed * delta
	
	# 旋转火球（可选）
	rotation = direction.angle()
	
	# 生命周期计时
	time_alive += delta
	if time_alive >= lifetime:
		explode()  # 到达最大存活时间后爆炸

func _on_body_entered(body):
	# 检查是否击中敌人
	if body.is_in_group("enemies") and body.has_method("take_damage"):
		# 造成直接伤害
		body.take_damage(damage)
		
		# 应用燃烧效果（如果敌人支持）
		if body.has_method("apply_burn_effect"):
			body.apply_burn_effect(burn_damage, burn_duration)
		
		# 爆炸并消失
		explode()

func explode():
	# 创建爆炸效果
	var explosion = preload("res://ExplosionEffect.tscn").instantiate()
	get_tree().get_root().add_child(explosion)
	explosion.global_position = global_position
	explosion.scale = Vector2(area_radius / 50.0, area_radius / 50.0)  # 根据范围调整爆炸大小
	
	# 对范围内的敌人造成伤害
	var enemies = get_tree().get_nodes_in_group("enemies")
	for enemy in enemies:
		if is_instance_valid(enemy) and enemy.has_method("take_damage"):
			var distance = global_position.distance_to(enemy.global_position)
			if distance <= area_radius:
				# 根据距离计算伤害衰减
				var damage_multiplier = 1.0 - (distance / area_radius) * 0.7  # 最小伤害为30%
				var area_damage = damage * damage_multiplier * 0.5  # 范围伤害为直接伤害的50%
				
				enemy.take_damage(area_damage)
				
				# 应用燃烧效果（如果敌人支持）
				if enemy.has_method("apply_burn_effect"):
					enemy.apply_burn_effect(burn_damage, burn_duration)
	
	# 销毁火球
	queue_free()
